package com.github.setial.intellijjavadocs.model.settings;
import com.github.setial.intellijjavadocs.utils.XmlUtils;
import org.apache.commons.beanutils.BeanUtils;
import org.jdom.Element;
import java.io.Serializable;
/**
* The type Java doc settings.
*
* @author Sergey Timofiychuk
*/
public class JavaDocSettings implements Serializable {
private static final String MODE = "MODE";
private static final String LEVELS = "LEVELS";
private static final String LEVEL = "LEVEL";
private static final String VISIBILITIES = "VISIBILITIES";
private static final String VISIBILITY = "VISIBILITY";
private static final String OVERRIDDEN_METHODS = "OVERRIDDEN_METHODS";
private static final String SPLITTED_CLASS_NAME = "SPLITTED_CLASS_NAME";
private static final String GENERAL = "GENERAL";
private static final String TEMPLATES = "TEMPLATES";
private static final String CLASS = "CLASS";
private static final String CLASSES = "CLASSES";
private static final String CONSTRUCTOR = "CONSTRUCTOR";
private static final String CONSTRUCTORS = "CONSTRUCTORS";
private static final String FIELD = "FIELD";
private static final String FIELDS = "FIELDS";
private static final String METHOD = "METHOD";
private static final String METHODS = "METHODS";
private GeneralSettings generalSettings = new GeneralSettings();
private TemplateSettings templateSettings = new TemplateSettings();
/**
* Instantiates a new Java doc settings object.
*/
public JavaDocSettings() {
}
/**
* Instantiates a new Java doc settings.
*
* @param element the element
*/
public JavaDocSettings(Element element) {
Element general = element.getChild(GENERAL);
if (general != null) {
generalSettings.setMode(XmlUtils.getValue(general, MODE, Mode.class));
generalSettings.setOverriddenMethods(Boolean.parseBoolean(general.getChild(OVERRIDDEN_METHODS).getValue()));
generalSettings.setSplittedClassName(Boolean.parseBoolean(general.getChild(SPLITTED_CLASS_NAME).getValue()));
generalSettings.setLevels(XmlUtils.getValues(general, LEVELS, LEVEL, Level.class));
generalSettings.setVisibilities(XmlUtils.getValues(general, VISIBILITIES, VISIBILITY, Visibility.class));
}
Element templates = element.getChild(TEMPLATES);
if (templates != null) {
templateSettings.setClassTemplates(XmlUtils.getMap(templates, CLASSES, CLASS));
templateSettings.setConstructorTemplates(XmlUtils.getMap(templates, CONSTRUCTORS, CONSTRUCTOR));
templateSettings.setFieldTemplates(XmlUtils.getMap(templates, FIELDS, FIELD));
templateSettings.setMethodTemplates(XmlUtils.getMap(templates, METHODS, METHOD));
}
}
/**
* Create dom model from this object and add it to root element passed as parameter.
*
* @param root the root
*/
public void addToDom(Element root) {
Element general = new Element(GENERAL);
root.addContent(general);
general.addContent(XmlUtils.getElement(MODE, generalSettings.getMode().toString()));
general.addContent(XmlUtils.getElement(OVERRIDDEN_METHODS, String.valueOf(generalSettings.isOverriddenMethods())));
general.addContent(XmlUtils.getElement(SPLITTED_CLASS_NAME, String.valueOf(generalSettings.isSplittedClassName())));
general.addContent(XmlUtils.getElement(LEVELS, LEVEL, generalSettings.getLevels()));
general.addContent(XmlUtils.getElement(VISIBILITIES, VISIBILITY, generalSettings.getVisibilities()));
Element templates = new Element(TEMPLATES);
root.addContent(templates);
templates.addContent(XmlUtils.getElement(CLASSES, CLASS, templateSettings.getClassTemplates()));
templates.addContent(XmlUtils.getElement(CONSTRUCTORS, CONSTRUCTOR, templateSettings.getConstructorTemplates()));
templates.addContent(XmlUtils.getElement(METHODS, METHOD, templateSettings.getMethodTemplates()));
templates.addContent(XmlUtils.getElement(FIELDS, FIELD, templateSettings.getFieldTemplates()));
}
/**
* Gets general settings.
*
* @return the general settings
*/
public GeneralSettings getGeneralSettings() {
return generalSettings;
}
/**
* Gets template settings.
*
* @return the template settings
*/
public TemplateSettings getTemplateSettings() {
return templateSettings;
}
@Override
public Object clone() throws CloneNotSupportedException {
JavaDocSettings result = new JavaDocSettings();
try {
if (this.generalSettings != null) {
result.generalSettings = (GeneralSettings) BeanUtils.cloneBean(this.generalSettings);
}
if (this.templateSettings != null) {
result.templateSettings = (TemplateSettings) BeanUtils.cloneBean(this.templateSettings);
}
} catch (Exception e) {
throw new CloneNotSupportedException(e.getMessage());
}
return result;
}
}